package cloud.lysky.java.on.datastruct_and_algorithm.day00003;

/**
 * 请实现一个函数用来判断字符串是否表示数值（包括整数和小数）。
 * 数值（按顺序）可以分成以下几个部分：
     * 若干空格
     * 一个小数或者整数
     * （可选）一个'e'或'E'，后面跟着一个整数
     * 若干空格
 * 小数（按顺序）可以分成以下几个部分：
 *
     * （可选）一个符号字符（'+' 或 '-'）
     * 下述格式之一：
     * 至少一位数字，后面跟着一个点 '.'
     * 至少一位数字，后面跟着一个点 '.' ，后面再跟着至少一位数字
     * 一个点 '.' ，后面跟着至少一位数字
 * 整数（按顺序）可以分成以下几个部分：
 *
     * （可选）一个符号字符（'+' 或 '-'）
     * 至少一位数字
 * 部分数值列举如下：
 *
 * ["+100", "5e2", "-123", "3.1416", "-1E-16", "0123"]
 * 部分非数值列举如下：
 *
 * ["12e", "1a3.14", "1.2.3", "+-5", "12e+5.4"]
 *示例 1：
 *
 * 输入：s = "0"
 * 输出：true
 * 示例 2：
 *
 * 输入：s = "e"
 * 输出：false
 * 示例 3：
 *
 * 输入：s = "."
 * 输出：false
 * 示例 4：
 *
 * 输入：s = "   .1   "
 * 输出：true
 * 输入仅含英文字母（大写和小写），数字（0-9），加号 '+' ，减号 '-' ，空格 ' ' 或者点 '.' 。
 */
public class Solution {
    public static void main(String[] args) {
        System.out.println(isNumber("-1E-16"));
    }
    public static boolean isNumber(String s) {
        if (s.contains("f") || s.contains("D")) {
            return false;
        }
        try {
            return !Float.isNaN(Float.parseFloat(s));
        } catch (NumberFormatException e) {
            return false;
        }
    }
}
